package com.example.springbootdemo.beanpostprocessor;

import org.springframework.beans.factory.InitializingBean;
import org.springframework.stereotype.Component;

import javax.annotation.PostConstruct;

@Component
public class Test implements InitializingBean {

    //@PostConstruct由CommonAnnotationBeanPostProcessor处理，它跟放进BeanDefinition的initMethod不一样，并且在afterPropertiesSet之前进行
    @PostConstruct
    public void init() {
        System.out.println("执行init");
    }

    //该方法的调用在afterPropertiesSet之后进行，读取BeanDefinition的initMethodName进行，需要更改BeanDefinition，实现MergedBeanDefinitionPostProcessor即可（这个流程会在beandefinitionpostprocessor的demo进行讲解）
    public void beanDefinitionInit() {
        System.out.println("执行beanDefinitionInit");
    }

    //该方法由
    @Override
    public void afterPropertiesSet() throws Exception {
        //从BeanPostProcess调用的过程可以看到两个方法中间会调用bean的初始化，一个是如果实现了InitialzingBean，就调用afterPropertiesSet方法
        System.out.println("执行afterPropertieSet");
    }
}
